// 导入可视化库 {
const { Tracer, Array1DTracer, LogTracer, Layout, VerticalLayout } = require('algorithm-visualizer');
// }
var a=465,b=255,r=0;


// define tracer variables {
const tracer = new Array1DTracer('图示');
tracer.set([a,b,r]);
const logger = new LogTracer('日志');
Layout.setRoot(new VerticalLayout([tracer, logger]));
Tracer.delay();
// }

// logger {
logger.println(`查找${a} 和 ${b}的最大公约数`);
logger.println(`r是每一步的a%b的结果`);
//logger.println('Checking if first number is at most the second number');
// }

if (a < b) {
  const tmp = a;
  a = b;
  b = tmp;
  // logger {
  logger.println('确保计算前第一个数大于第二个数');
  // }
  // visualize {
  tracer.set(a);
  Tracer.delay();
  
  // }
}

var r=a%b;
// logger {
logger.println(`r = a % b`);
logger.println(`r = ${a} % ${b} = ${a % b}`);
// }
while (r > 0) {
  a=b;
  // logger {
  logger.println(`a = b : a = ${b}`);
  // }
  b=r;
  // logger {
  logger.println(`b = r : b = ${r}`);
  // }
  r=a%b;
  // logger {
  logger.println(`r = a % b : r = ${a} % ${b} = ${a % b}`);
  logger.println(`---------------------------------------`);
  // }
  // visualize {
  tracer.patch(0, a);
  tracer.patch(1, b);
  tracer.patch(2, r);
  Tracer.delay();
  // }
  
  // visualize {
  tracer.patch(0, a);
  tracer.patch(1, b);
  tracer.patch(2, r);
  Tracer.delay();
  tracer.depatch(0);
  tracer.depatch(1);
  tracer.depatch(2);
  // }
}

// logger {
logger.println(`最大公约数是 ${b}`);
// }
